
import model.User;
import service.UserService;
import service.impl.UserServiceImpl;

import java.util.List;
import java.util.Scanner;

/**
 * 系统主类，程序的入口点
 * 提供控制台菜单界面，实现用户与系统的交互操作
 * 包括用户注册、查询、更新、删除等功能的界面展示
 */
public class Main {
    // 用户服务实例，用于调用业务逻辑方法
    private static UserService userService = new UserServiceImpl();
    // 扫描器实例，用于读取用户输入
    private static Scanner scanner = new Scanner(System.in);

    /**
     * 程序主入口方法
     * 显示欢迎信息，进入主循环，根据用户选择调用相应的功能方法
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        System.out.println("=== 用户注册查询系统 ===");
        while (true) {
            showMenu();
            int choice = scanner.nextInt();
            scanner.nextLine(); // 消费换行符
            switch (choice) {
                case 1 -> registerUser();
                case 2 -> findUserByUsername();
                case 3 -> findUserById();
                case 4 -> showAllUsers();
                case 5 -> updateUser();
                case 6 -> deleteUser();
                case 0 -> {
                    System.out.println("感谢使用，再见！");
                    return;
                }
                default -> System.out.println("无效的选择，请重新输入！");
            }
        }
    }

    /**
     * 显示系统菜单
     * 输出可选择的功能列表，等待用户输入选择
     */
    private static void showMenu() {
        System.out.println("\n请选择操作：");
        System.out.println("1. 用户注册");
        System.out.println("2. 根据用户名查询用户");
        System.out.println("3. 根据ID查询用户");
        System.out.println("4. 显示所有用户");
        System.out.println("5. 更新用户信息");
        System.out.println("6. 删除用户");
        System.out.println("0. 退出系统");
        System.out.print("请输入选择：");
    }

    /**
     * 用户注册功能
     * 收集用户输入的注册信息，创建用户对象，调用用户服务进行注册
     * 显示注册结果信息
     */
    private static void registerUser() {
        System.out.println("\n===== 用户注册 =====");
        System.out.print("请输入用户名：");
        String username = scanner.nextLine();
        System.out.print("请输入密码：");
        String password = scanner.nextLine();
        System.out.print("请输入邮箱：");
        String email = scanner.nextLine();

        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        user.setEmail(email);

        if (userService.registerUser(user)) {
            System.out.println("注册成功！");
        } else {
            System.out.println("注册失败，用户名已存在！");
        }
    }

    /**
     * 根据用户名查询用户功能
     * 收集用户输入的用户名，调用用户服务进行查询
     * 显示查询结果信息
     */
    private static void findUserByUsername() {
        System.out.println("\n===== 根据用户名查询用户 =====");
        System.out.print("请输入用户名：");
        String username = scanner.nextLine();

        User user = userService.findByUsername(username);
        if (user != null) {
            System.out.println("查询结果：");
            System.out.println("ID: " + user.getId());
            System.out.println("用户名: " + user.getUsername());
            System.out.println("密码: " + user.getPassword());
            System.out.println("邮箱: " + user.getEmail());
        } else {
            System.out.println("未找到该用户！");
        }
    }

    /**
     * 根据ID查询用户功能
     * 收集用户输入的用户ID，调用用户服务进行查询
     * 显示查询结果信息
     */
    private static void findUserById() {
        System.out.println("\n===== 根据ID查询用户 =====");
        System.out.print("请输入用户ID：");
        int id = scanner.nextInt();
        scanner.nextLine(); // 消费换行符

        User user = userService.findById(id);
        if (user != null) {
            System.out.println("查询结果：");
            System.out.println("ID: " + user.getId());
            System.out.println("用户名: " + user.getUsername());
            System.out.println("密码: " + user.getPassword());
            System.out.println("邮箱: " + user.getEmail());
        } else {
            System.out.println("未找到该用户！");
        }
    }

    /**
     * 显示所有用户功能
     * 调用用户服务查询所有用户，显示用户列表信息
     * 如果没有用户，显示相应提示信息
     */
    private static void showAllUsers() {
        System.out.println("\n===== 所有用户列表 =====");
        List<User> userList = userService.findAllUsers();
        if (userList.isEmpty()) {
            System.out.println("当前没有用户！");
        } else {
            for (User user : userList) {
                System.out.println("ID: " + user.getId() + ", 用户名: " + user.getUsername() + ", 邮箱: " + user.getEmail());
            }
        }
    }

    /**
     * 更新用户信息功能
     * 收集用户输入的用户ID和要更新的信息，调用用户服务进行更新
     * 显示更新结果信息
     */
    private static void updateUser() {
        System.out.println("\n===== 更新用户信息 =====");
        System.out.print("请输入用户ID：");
        int id = scanner.nextInt();
        scanner.nextLine(); // 消费换行符

        User user = userService.findById(id);
        if (user == null) {
            System.out.println("未找到该用户！");
            return;
        }

        System.out.println("当前用户信息：");
        System.out.println("ID: " + user.getId());
        System.out.println("用户名: " + user.getUsername());
        System.out.println("密码: " + user.getPassword());
        System.out.println("邮箱: " + user.getEmail());

        System.out.print("请输入新用户名（回车保持不变）：");
        String username = scanner.nextLine();
        if (!username.isEmpty()) {
            user.setUsername(username);
        }

        System.out.print("请输入新密码（回车保持不变）：");
        String password = scanner.nextLine();
        if (!password.isEmpty()) {
            user.setPassword(password);
        }

        System.out.print("请输入新邮箱（回车保持不变）：");
        String email = scanner.nextLine();
        if (!email.isEmpty()) {
            user.setEmail(email);
        }

        if (userService.updateUser(user)) {
            System.out.println("更新成功！");
        } else {
            System.out.println("更新失败！");
        }
    }

    /**
     * 删除用户功能
     * 收集用户输入的用户ID和确认信息，调用用户服务进行删除
     * 显示删除结果信息
     */
    private static void deleteUser() {
        System.out.println("\n===== 删除用户 =====");
        System.out.print("请输入用户ID：");
        int id = scanner.nextInt();
        scanner.nextLine(); // 消费换行符

        System.out.print("确定要删除该用户吗？(y/n)：");
        String confirm = scanner.nextLine();
        if (confirm.equalsIgnoreCase("y")) {
            if (userService.deleteUser(id)) {
                System.out.println("删除成功！");
            } else {
                System.out.println("删除失败，用户不存在！");
            }
        } else {
            System.out.println("已取消删除操作！");
        }
    }
}